ジョイスティックドライバ

                                JOYDRV.X Version 2.20

●概要

         JOYDRV.Xは、IOCSコール$3B(_JOYGET)と$F2(AJOY.X用コール)のルーチンを変更し、
        様々なジョイスティックの読み込みを可能にするプログラムです。
    ジョイスティックは一部の物を除き自動で認識されるので、パラメータ設定などの
    作業が低減されるようになっています。


●このドキュメントでの用語について

        このドキュメントでは、一部略称を用いています。
        以下はその一覧です。(例外あり)

                CPSF            →      カプコンパワースティックファイター
                ATARI           →      アタリ社準拠のジョイパッド
                MD              →      メガドライブ
                SS              →      セガサターン
                PS              →      プレイステーション
                TOWNS           →      FM−TOWNS


●読み込み可能なジョイスティックについて

        現在のバージョンで読み込み可能なジョイスティックの一覧
┌───┬───────────┬───────┬───────────────────┐
│ 機種 │ジョイスティック種類  │接続に必要な物│備考                                  │
├───┼───────────┼───────┼───────────────────┤
│ATARI │準拠している物全般    │特に無し      │                                      │
│TOWNS │準拠している物全般    │特に無し      │パラメータ"/S"と"/M"の設定が必要      │
│X68K  │CPSF-PCアダプタ       │左記の物      │パラメータ"/S"と"/M"の設定が必要      │
│X68K  │TWIN PLUSパッド       │特に無し      │                                      │
│X68K  │魔法のパッド          │特に無し      │パラメータ"/M"の設定が必要            │
│X68K  │PAC−LANDパッド│特に無し      │パラメータ"/M"の設定が必要            │
│X68K  │MD変換コネクタ        │左記の物      │MDパッドの接続に使用                  │
│MD    │マルチタップ          │MD変換コネクタ│                                      │
│MD    │3ボタンパッド         │MD変換コネクタ│                                      │
│MD    │6ボタンパッド         │MD変換コネクタ│短時間に連続して読み込みを行うと、    │
│      │                      │              │X,Y,Z,MODEボタンの読み込み内容が      │
│      │                      │              │不安定になりますので気をつけて下さい。│
│SS    │マルチターミナル6    │*1          │                                      │
│SS    │ノーマルパッド        │*1          │                                      │
│SS    │コードレスパッド      │*1          │                                      │
│SS    │ミッションスティック  │*1          │                                      │
│SS    │ハンドルコントローラ  │*1          │                                      │
│SS    │マルチコントローラ    │*1          │                                      │
│PS    │マルチタップ          │*2          │PSメモリカードのリード/ライトが可能  │
│PS    │ノーマルパッド        │*2          │                                      │
│PS    │アナログコントローラ  │*2          │                                      │
│PS    │DUAL SHOCKコントローラ│*2          │                                      │
│PS    │ネジコン              │*2          │                                      │
│PS    │プロポコン            │*2          │                                      │
│PS    │ジョグコン            │*2          │モーター制御はまだ未対応です。        │
│PS    │DDRマッド          │*2          │                                      │
└───┴───────────┴───────────────────────────┘

        *1 セガサターンパッド接続ケーブル
        *2 プレイステーションパッド接続ケーブル


●添付ファイル

        アーカイブされているファイルの一覧
┌───────┬───────────────────────────────────┐
│ ファイル名 │内容                                                                  │
├───────┼───────────────────────────────────┤
│JOYDRV.HED    │ネットなどにアップする場合の見出し                                    │
│JOYDRV.S      │ドライバのソースファイルです                                          │
│JOYDRV.X      │ドライバ本体です                                                      │
│JOYDRV.DOC    │このドキュメントです                                                  │
│JOYLIB.S      │C言語で使用する時のライブラリのソースファイルです                    │
│JOYLIB.L      │C言語で使用する時のライブラリです                                    │
│STICK2.S      │X-BASICで使用する時の外部関数のソースファイルです                     │
│STICK2.FNC    │X-BASICで使用する時の外部関数です                                     │
│PS_CABLE.DOC  │プレイステーションパッド接続ケーブルの作成方法が書かれた              │
│              │ドキュメントファイルです                                              │
│SS_CABLE.DOC  │セガサターンパッド接続ケーブルの作成方法が書かれた                    │
│              │ドキュメントファイルです                                              │
│JOYTEST.R     │JOYDRV用のジョイスティック読み込みのテストプログラムです              │
│AJOY_SS.DAT   │JOYDRVをAJOY.Xの代わりに使用する場合のビット変換データファイルです    │
│              │(セガサターン用)                                                      │
│AJOY_PS.DAT   │JOYDRVをAJOY.Xの代わりに使用する場合のビット変換データファイルです    │
│              │(プレイステーション用)                                                │
│SS_AB.DAT     │セガサターンパッドでA,Bボタンをとなりあわせにするビット変換データ     │
│              │ファイルです                                                          │
│SS_BA.DAT     │セガサターンパッドでA,Bボタンをとなりあわせにするビット変換データ     │
│              │ファイルです                                                          │
│JOYCNF.X      │TAKKUNさん作のビット変換データファイルを簡単に作成することが    │
│              │できるツールです                                                      │
│JOYCNF.DOC    │JOYCNF.Xの説明書です                                                  │
│6BI_PAT.R     │JOYDRV.XをSFXVIで使用するためのパッチプログラムです                   │
│6BI_PAT.DOC   │6BI_PAT.Rの説明書です                                                 │
│6BI_LIB.L     │SFXVIでJOYDRV.Xの常駐状態を取得するための関数が入っているライブラリ   │
│6BI_LIB.DOC   │6BI_LIB.Lに入っている関数の説明書                                     │
└───────┴───────────────────────────────────┘


●JOYDRVの使用方法

        ※デバイスドライバとして使用する場合

                 CONFIG.SYSのDEVICE=でデバイスドライバとして登録して下さい。
                なお、JOYDRVはキャラクタ・デバイス型のドライバですが、デバイス名を指定
                することはできません。
                 また、デバイスドライバとして登録した場合には解除はできませんが、
                設定値などの変更は可能です。

        ※常駐プログラムとして使用する場合

                 コマンドライン上からJOYDRV.Xを実行して下さい。
                なお、この場合にはJOYDRVはデバイスドライバとしての処理は行いません。
                単なる常駐プログラムとして処理が行われます。


●ゲームに組み込む場合

         JOYDRVをゲームで使用する場合、「●JOYDRVの使用方法」に従ってJOYDRVの組み込みを
        行うのですが、下記の番号順に従って試していって下さい。

                1.CONFIG.SYSにデバイスドライバとして組み込んでみる。
                2.AUTOEXEC.BATに常駐プログラムとして組み込んでみる。

         1か2の組み込みで十字キー以外のボタンが正常に動作しない場合は、パラメータ"/I0"を
        指定して下さい。また、START,SELECTボタンの動作がおかしい場合には、パラメータ"/S"や
        "/M"の設定を確認して下さい。
     ボタンの反応はするが反応が悪かったり誤動作しているようであれば、パラメータ"/M"
        の設定を確認して下さい。それでも正常に動作しない場合はそのコントローラの使用は
        諦めて下さい。
         どの対処を施しても全く動作しない場合には、そのゲームがジョイスティックの読み込みに
        IOCSを使用していない可能性があります。その時にはゲームのプログラムにパッチを当てるか
        しましょう。(こちらで付属させている場合もあります)


●パラメータ指定について

        以下が指定できるパラメータとその内容の一覧です。
┌───────┬───────┬───────────────────────────┐
│ パラメータ │ デフォルト │内容                                                  │
├───────┼───────┼───────────────────────────┤
│/M0           │              │ MDマルチタップ及びSS,PSパッド接続ケーブルを使用不可 │
│              │              │にします。また、JOY STICK 1で魔法のパッド、           │
│              │              │PAC−LANDパッド、CPSF-PCアダプタ2ボタンモード、│
│              │              │FM-TOWNSパッドを使用する場合には、このパラメータを    │
│              │              │指定して下さい。                                      │
├───────┼───────┼───────────────────────────┤
│/M1           │              │ MDマルチタップ及びSS,PSパッド接続ケーブルを使用可能 │
│              │              │にします。(マルチタップ使用時のキャッシュ無し)        │
│              │              │ ただし、キャッシュ無し指定ではマルチタップ使用時の  │
│              │              │負荷が重くなります。"/M2"で正常に動作しない場合に     │
│              │              │指定して下さい。                                      │
├───────┼───────┼───────────────────────────┤
│/M2           │      ○      │ MDマルチタップ及びSS,PSパッド接続ケーブルを使用可能 │
│              │              │にします。(マルチタップ使用時のキャッシュあり)        │
│              │              │キャッシュ有り指定で、マルチタップ使用時の負荷が      │
│              │              │軽くなります。通常はこのパラメータを指定して下さい。  │
│              │              │ なお、キャッシュが有効となるのはMDとSSのマルチタップ│
│              │              │を使用する場合にのみ限ります。                        │
├───────┼───────┼───────────────────────────┤
│/B?           │      ○      │1つ目の?は、ジョイスティック番号0〜6                 │
│              │              │                                                      │
│              │              │ ビット変換を行いません。ボタンの位置を変更しない    │
│              │              │場合、このパラメータを指定して下さい。                │
├───────┼───────┼───────────────────────────┤
│/B?ファイル名 │              │1つ目の?は、ジョイスティック番号0〜6                 │
│              │              │ファイル名は、変換データを格納しているファイル        │
│              │              │                                                      │
│              │              │ ファイル名で指定したファイルの内容に従ってビット変換│
│              │              │を行います。ボタンの配置を変更したい時にこのパラメータ│
│              │              │を指定して下さい。                                    │
│              │              │ ファイルの内容については、「」を参照して下さい。    │
├───────┼───────┼───────────────────────────┤
│/I0           │              │ IOCS$3BのD0.Lの返り値をROM IOCS互換にします。       │
│              │              │ X-BASICまたはC言語で作られたゲームで正常に動作しない│
│              │              │場合にこのパラメータを指定して下さい。                │
├───────┼───────┼───────────────────────────┤
│/I1           │      ○      │ IOCS$3BのD0.Lの返り値をJOYDRV拡張にします。         │
├───────┼───────┼───────────────────────────┤
│/T?           │/T6           │1つ目の?は、JOY STICK 1のパッド数0〜9                │
│              │              │                                                      │
│              │              │ MD、SSのマルチタップとPSパッド接続ケーブル使用時の  │
│              │              │JOY STICK 1側のコントローラ数を設定します。           │
│              │              │PSではマルチタップの接続を関知できない為、マルチタップ│
│              │              │の有り無しに合わせて、このパラメータで指定しなければ  │
│              │              │なりません。コントローラだけの時は"/T1"を指定する     │
│              │              │ことでJOY STICK 2が2Pとなり、マルチタップを使用する時 │
│              │              │は"/T4"を指定することでJOY STICK 2が5Pとなります。    │
│              │              │ また、SSパッドが2個、ATARIパッドが1個しかなくて   │
│              │              │マルチタップを使用する場合にも、"/T2"と指定することで │
│              │              │マルチタップの1Pと2Pがそれぞれ1Pと2Pに、JOY STICK 2の │
│              │              │ATARIパッドが3Pと言う用にすることができます。         │
├───────┼───────┼───────────────────────────┤
│/E?,?         │/E?,3         │1つ目の?は、ジョイスティック番号0〜6                 │
│              │?=0〜6        │2つ目の?は0〜Fの16進数で、ビット単位の指定となります │
│              │              │各ビットに対応する内容は以下の通りです。              │
│              │              │  bit 0     左十字キーの上下指定                    │
│              │              │  bit 1     左十字キーの左右指定                    │
│              │              │  bit 2     右十字キーの上下指定                    │
│              │              │  bit 3     右十字キーの左右指定                    │
│              │              │該当するビットが0の時はエミュレートを行わず、         │
│              │              │1の時はエミュレートを行います。                       │
│              │              │                                                      │
│              │              │ 各ジョイスティック番号単位に                        │
│              │              │アナログスティック → デジタル十字キー変換の          │
│              │              │エミュレートを設定します。                            │
├───────┼───────┼───────────────────────────┤
│/P?,??        │/P?,4F        │1つ目の?は、ジョイスティック番号0〜6                 │
│              │?=0〜6        │2つ目の??は00〜7Fの16進数で、十字キーエミュレート時  │
│              │              │の0と1(ONとOFF)の境目になるしきい値を設定します。     │
│              │              │ONとOFFの境目は、0に近いほど中心から離れていきます。  │
│              │              │                                                      │
│              │              │ 各ジョイスティック番号単位に十字キーエミュレート時  │
│              │              │のしきい値を設定します。                              │
├───────┼───────┼───────────────────────────┤
│/S?,?         │/S?,0         │1つ目の?は、ジョイスティック番号0〜6                 │
│              │?=0〜6        │2つ目の?は、0で通常モード、1でFM-TOWNSモード         │
│              │              │                                                      │
│              │              │ STARTまたはSELECTボタンの動作モードを設定します。   │
│              │              │STARTまたはSELECTボタンが正常に動作しない場合や、     │
│              │              │他のボタンがSTARTやSELECTボタンとして誤認識されて     │
│              │              │しまう場合にはFM-TOWNSモードを指定して下さい。        │
│              │              │ また、FM-TOWNSパッド、CPSF-PCアダプタ2ボタンモードを│
│              │              │使用する場合は必ずFM-TOWNSモードに設定して下さい。    │
│              │              │ 特に異常がない場合は、通常モードを指定するように    │
│              │              │して下さい。                                          │
├───────┼───────┼───────────────────────────┤
│/L?,?,??,??   │/L?,?,00,00   │1つ目の?は、ジョイスティック番号0〜6                 │
│              │1つ目の?=0〜6│2つ目の?は、16進数でビット番号0〜F                   │
│              │2つ目の?=0〜F│3つ目の??は、16進数で連射時のON回数00〜FF            │
│              │              │4つ目の??は、16進数で連射時のOFF回数00〜FF           │
│              │              │                                                      │
│              │              │ 各ジョイスティック番号のビット単位に連射モードの    │
│              │              │設定を行います。連射の速度やパターンについては、ONと  │
│              │              │OFFの回数を指定することで行います。                   │
│              │              │ 連射モードを解除する場合は、ONとOFFの両方に00を指定 │
│              │              │して下さい。                                          │
├───────┼───────┼───────────────────────────┤
│/D            │              │ JOYDRV.Xを実行した時に表示される設定状態を表示しない│
│              │              │ようにします。                                        │
│              │              │ タイトルと常駐状態のみ表示されるようになります。    │
├───────┼───────┼───────────────────────────┤
│/R            │              │ JOYDRVの常駐を解除します。                          │
│              │              │ただし、コマンドライン上から実行して常駐している時    │
│              │              │のみ有効となります。                                  │
└───────┴───────┴───────────────────────────┘

        注1 "/"は、"-"でも可能です。また、アルファベットは小文字でも可能です。


●ジョイスティックの読み込み制御について

        JOYDRVでは以下のプロセスでジョイスティックの読み込みと読み込み内容の編集を行います。

                        ┌───────────────────────┐
                        │     ジョイスティックタイプの判定        │
                        └───────────────────────┘
                                                ↓
                        ┌───────────────────────┐
                        │ジョイスティックの読み込み(デジタル、アナログ)│
                        └───────────────────────┘
                                                ↓
                        ┌───────────────────────┐
                        │        連射モードの処理              │
                        └───────────────────────┘
                                                ↓
                        ┌───────────────────────┐
                        │        ビット変換の処理              │
                        └───────────────────────┘
                                                ↓
                        ┌───────────────────────┐
                        │     十字キーエミュレートの処理          │
                        └───────────────────────┘
                                                ↓
                        ┌───────────────────────┐
                        │   ROM IOCS互換またはJOYDRV拡張の処理      │
                        └───────────────────────┘
                                                        (IOCS$3Bの通常読み込み時のみ)


        ※ジョイスティックタイプの判定

                 接続されているジョイスティックからジョイスティックの種類を取得します。
                正常に判定が行われない場合には、パラメータ"/M"の設定を調整して下さい。


        ※ジョイスティックの読み込み(デジタル)

                ジョイスティックから読み込まれるキー情報は以下のようになります。
                (以下、この情報をキー内部情報として説明していきます)

                START,SELECTボタンモードが通常モードの場合
┌──────────┬────────────────────────────────┬─┐
│ ジョイスティック │                ビット番号           │ │
│   の種類    │ 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0 │備│
├──────────┼────────────────────────────────┼─┤
│CPSF-PC 6ボタン CPSF│ SE   1   1   1  SE   X   Y   R  ST   B   A   L  右  左  下  上 │ │
│CPSF-PC 6ボタン MD6 │ MO   1   1   1  MO   X   Y   Z  ST   B   A   C  右  左  下  上 │ │
│CPSF-PC 6ボタン MD3 │  1   1   1   1   1   1   1   1  ST   B   A   C  右  左  下  上 │ │
│CPSF-PC 2ボタン     │ 右   1   1   1  右  左 *下 *上   B   B   A   A *右 *左 *下 *上 │*1│
│MD変換コネクタ  MD6 │ MO   1   1   1  MO   X   Y   Z  ST   C   B   A  右  左  下  上 │ │
│MD変換コネクタ  MD3 │  1   1   1   1   1   1   1   1  ST   C   B   A  右  左  下  上 │ │
│ATARI仕様      その1│  1   1   1   1   1   1   1   1   1   B   A   1  右  左  下  上 │ │
│ATARI仕様      その2│ 右   1   1   1  右  左  下  上   B   B   A   A  右  左  下  上 │ │
│FM-TOWNSパッド      │*右   1   1   1 *右 *左 *下 *上   B   B   A   A *右 *左 *下 *上 │*2│
│TWIN PLUS           │R右   1   1   1 R右 R左 R下 R上   B   B   A   A L右 L左 L下 L上 │ │
│魔法のパッド        │  R   1   1   1   R   L   0   0   B   A   C   D  右  左  下  上 │ │
│PAC-LANDパッド      │ *C   1   1   1  *C  *A   1   1   1   1   B   B  *C  *A   1   1 │*3│
│MDマルチタップ  MD3 │  1   1   1   1   1   1   1   1  ST   A   C   B  右  左  下  上 │ │
│MDマルチタップ  MD6 │ MO   1   1   1  MO   X   Y   Z  ST   A   C   B  右  左  下  上 │ │
│SSパッド            │  1   1   1   L   R   X   Y   Z  ST   A   C   B  右  左  下  上 │ │
│PSパッド            │ SE *LS *RS  L2  L1  □  △  R1  ST  ×  R2  ○  右  左  下  上 │*4│
└──────────┴────────────────────────────────┴─┘

                START,SELECTボタンモードがFM-TOWNSモードの場合
┌──────────┬────────────────────────────────┬─┐
│ ジョイスティック │                ビット番号           │ │
│   の種類    │ 15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0 │備│
├──────────┼────────────────────────────────┼─┤
│CPSF-PC 6ボタン CPSF│  1   1   1   1  SE   X   Y   R   1   B   A   L  右  左  下  上 │ │
│CPSF-PC 6ボタン MD6 │  1   1   1   1  MO   X   Y   Z   1   B   A   C  右  左  下  上 │ │
│CPSF-PC 6ボタン MD3 │  1   1   1   1   1   1   1   1   1   B   A   C  右  左  下  上 │ │
│CPSF-PC 2ボタン     │ SE   1   1   1  右  左  下  上  ST   B   A   A  右  左  下  上 │ │
│MD変換コネクタ  MD6 │        正常な読み込みがおこなわれません        │ │
│MD変換コネクタ  MD3 │        正常な読み込みがおこなわれません        │ │
│ATARI仕様      その1│  1   1   1   1   1   1   1   1   1   B   A   1  右  左  下  上 │ │
│ATARI仕様      その2│  1   1   1   1  右  左  下  上   1   B   A   A  右  左  下  上 │ │
│FM-TOWNSパッド      │ SE   1   1   1  右  左  下  上  ST   B   A   A  右  左  下  上 │ │
│TWIN PLUS           │  1   1   1   1 R右 R左 R下 R上   1   B   A   A L右 L左 L下 L上 │ │
│魔法のパッド        │  1   1   1   1   R   L   0   0   1   A   C   D  右  左  下  上 │ │
│PAC-LANDパッド      │  1   1   1   1  *C  *A   1   1  *1   1   B   B  *C  *A   1   1 │*5│
│MDマルチタップ  MD3 │  1   1   1   1   1   1   1   1  ST   A   C   B  右  左  下  上 │ │
│MDマルチタップ  MD6 │ MO   1   1   1  MO   X   Y   Z  ST   A   C   B  右  左  下  上 │ │
│SSパッド            │  1   1   1   L   R   X   Y   Z  ST   A   C   B  右  左  下  上 │ │
│PSパッド            │ SE *LS *RS  L2  L1  □  △  R1  ST  ×  R2  ○  右  左  下  上 │*4│
└──────────┴────────────────────────────────┴─┘

                *1    STARTが押された時ビット2,3が、SELECTまたはMODEが押された時
                        ビット0,1,8,9が、それぞれ0になります。

                *2    STARTが押された時ビット2,3,10,11,15が、SELECTが押された時
                        ビット0,1,8,9が、それぞれ0になります。

                *3    AとCが同時に押された時は、ビット10,11,15が1になります。

                *4    アナログコントローラで、LEDが赤色に点灯している時のみ、有効です。
                        それ以外の時は、ボタンを押していても1になります。
                                LS .. 左アナログスティックのボタン
                                RS .. 右アナログスティックのボタン

                *5    AとCが同時に押された時は、ビット7が0になります。


        ※ジョイスティックの読み込み(アナログ)

                 アナログの読み込みについては、「●アセンブラ・インタフェース」の
                「◎アナログスティック読み込み」についてを参照して下さい。


        ※連射モードの処理

                 キー内部情報のビット単位ごとに、連射の処理が行われます。
                連射の処理は、IOCSコール$3Bでジョイスティックの読み込みが行われた時に
                実行されます。従って定期的に読み込みを行っていないと連射にはなりません
                ので注意して下さい。
                 キー内部情報のビットが0(ON)になっている場合、JOYDRV内のON,OFFカウンタの
                処理が行われ、ビットの状態が0または1に変更されます。
                 キー内部情報のビットが1(OFF)、または、連射モードが無しになっている場合、
                JOYDRV内のON,OFFカウンタがクリアされ、キー内部情報のビットは変更されません。
                (以下、この処理が行われた情報をキー内部情報(連射)として説明していきます)


        ※ビット変換の処理

                 キー内部情報(連射)に対してビット変換の処理が行われます。
                 ビット変換が無しの場合は、キー内部情報(連射)に対して何も処理が行われません。
                 ビット変換がありの場合は、キー内部情報(連射)を元にビット変換データファイル
                (32バイトのバイナリファイルです)に従って、新たにキー情報を生成します。

                以下がビット変換データファイルの内容です。

                アドレス サイズ  内容
                 + 0     WORD   キー内部情報(連射)のbit  0が0になる時に設定する16ビットのデータ
                 + 2     WORD   キー内部情報(連射)のbit  1が0になる時に設定する16ビットのデータ
                 + 4     WORD   キー内部情報(連射)のbit  2が0になる時に設定する16ビットのデータ
                 + 6     WORD   キー内部情報(連射)のbit  3が0になる時に設定する16ビットのデータ
                 + 8     WORD   キー内部情報(連射)のbit  4が0になる時に設定する16ビットのデータ
                 +10     WORD   キー内部情報(連射)のbit  5が0になる時に設定する16ビットのデータ
                 +12     WORD   キー内部情報(連射)のbit  6が0になる時に設定する16ビットのデータ
                 +14     WORD   キー内部情報(連射)のbit  7が0になる時に設定する16ビットのデータ
                 +16     WORD   キー内部情報(連射)のbit  8が0になる時に設定する16ビットのデータ
                 +18     WORD   キー内部情報(連射)のbit  9が0になる時に設定する16ビットのデータ
                 +20     WORD   キー内部情報(連射)のbit 10が0になる時に設定する16ビットのデータ
                 +22     WORD   キー内部情報(連射)のbit 11が0になる時に設定する16ビットのデータ
                 +24     WORD   キー内部情報(連射)のbit 12が0になる時に設定する16ビットのデータ
                 +26     WORD   キー内部情報(連射)のbit 13が0になる時に設定する16ビットのデータ
                 +28     WORD   キー内部情報(連射)のbit 14が0になる時に設定する16ビットのデータ
                 +30     WORD   キー内部情報(連射)のbit 15が0になる時に設定する16ビットのデータ

                 JOYDRVではキー内部情報(連射)の各ビットを比較していき、0の時には該当する
                データをANDしていきます。(最初は$FFFFです。これにANDを重ねていきます)
                 これにより新たに作成されたキー情報を元のキー内部情報(連射)とすり替える
                ことで以降の処理を行っていきます。

        ※十字キーエミュレートの処理

                 「※ジョイスティックの読み込み(アナログ)」で読み込まれたアナログスティックの
                値とパラメータ"/E"と"/P"の設定値を元に、デジタルの上下左右のビットにON/OFF状態を
                設定します。
                 エミュレートが禁止されている場合は、デジタルの上下左右のビットは変更されません。
                 エミュレートが許可されている場合は、しきい値を境に0と1がデジタルの上下左右の
                ビットに設定されます。
                 なお、エミュレートで対象となるビットは以下の通りです。

                        左アナログスティック上 → bit  0
                        左アナログスティック下 → bit  1
                        左アナログスティック左 → bit  2
                        左アナログスティック右 → bit  3
                        右アナログスティック上 → bit  8
                        右アナログスティック下 → bit  9
                        右アナログスティック左 → bit 10
                        右アナログスティック右 → bit 11


        ※ROM IOCS互換またはJOYDRV拡張の処理

                 この処理までの間に変換された情報を、IOCS$3Bの通常読み込みの返り値として
                設定するときに編集を行います。
                 ROM IOCS互換の時は、ビット4と7には1が、上位24ビットには0が設定されます。
                 JOYDRV拡張の時は、編集処理は何も行いません。


●アセンブラ・インタフェース

        ※IOCSコール$3B

                エラーコード一覧(引き数のD1.Wが正の時)
                ┌───────┬───────────────────────────┐
                │ D0.Lの戻り値 │内容                                                  │
                ├───────┼───────────────────────────┤
                │$00000000     │ ジョイスティック番号が範囲外かマルチタップが未接続  │
                │              │の状態でジョイスティック番号に2〜6を指定した時        │
                └───────┴───────────────────────────┘

                エラーコード一覧(引き数のD1.Wが負の時)
                ┌───────┬───────────────────────────┐
                │ D0.Lの戻り値 │内容                                                  │
                ├───────┼───────────────────────────┤
                │$00000000     │正常終了                                              │
                │$FFFFFFFF     │異常終了または設定値が範囲外                          │
                │$FFFFFFFE     │ジョイスティック番号が範囲外                          │
                │$FFFFFFFC     │PSパッド接続ケーブルが接続されていない                │
                │$FFFFFFFB     │メモリカード未接続                                    │
                │$FFFFFFFA     │読み込みエラー                                        │
                │$FFFFFFF9     │書き込みエラー                                        │
                │$FFFFFFF8     │ビット番号が範囲外                                    │
                └───────┴───────────────────────────┘

                ◎ジョイスティックの通常読み込み(ROM IOCSと同じ)

                        引き数
                                D1.W =  ジョイスティック番号(0〜6)
                                        2〜6はマルチタップ接続時のみ可能です。

                        戻り値
                                D0.L =  ジョイスティックのキー情報
                                        キー情報の内容については、
                                        「●ジョイスティックの読み込み制御について」を
                                        参照して下さい。

                ◎ドライバ初期化/終了処理

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0000
                                D3.W =  $0000:初期化処理
                                        $0001:終了処理

                        戻り値
                                D0.L =  エラーコード

                        * このコールは、ドライバ常駐時または解放時に自動的にコールが
                          呼び出されるので、ユーザーは実行しないで下さい。

                ◎JOYDRV常駐状態・取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0001

                        戻り値
                                D0.L =  0:JOYDRVは常駐していない
                                        0以外:JOYDRVは常駐している
                                        (常駐チェック用文字列が格納されているアドレス)
                                        文字列 JOYDRV

                ◎JOYDRV内部バッファアドレスの取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0002
                                D3.W =  ジョイスティック番号(0〜6)か負の値

                        戻り値
                                D0.L =  エラーコード
                                A1.L =  JOYDRV内部バッファアドレス

                        内部バッファの内容については非公開とします。
                        (頻繁に変わる可能性が高いので)

                ◎アナログスティック読み込み

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0008
                                D3.W =  ジョイスティック番号(0〜6)
                                A1.L =  バッファアドレス

                        戻り値
                                D0.L =  ジョイスティックタイプ(下記を参照)
                                        または、エラーコード

                        ジョイスティックタイプには以下の種類があります

                                $00000000 =     ATARI準拠
                                $00010000 =     MD3ボタン(マルチタップ無し)
                                $00010001 =     MD6ボタン(マルチタップ無し)
                                $00010100 =     MD3ボタン(マルチタップあり)
                                $00010101 =     MD6ボタン(マルチタップあり)
                                $0001010f =     MDパッド未接続(マルチタップあり)
                                $00020000 =     SSノーマルパッド(マルチタップ無し)
                                $00020001 =     SSアナログパッド(マルチタップ無し)
                                $00020100 =     SSノーマルパッド(マルチタップあり)
                                $00020101 =     SSアナログパッド(マルチタップあり)
                                $0002010f =     SSパッド未接続(マルチタップあり)
                                $00030001 =     PSマウス
                                $00030002 =     PSネジコン、プロポコン
                                $00030004 =     PSデジタル(LED未点灯時)、DDRマッド
                                $00030005 =     PSアナログ(LED緑点灯時)
                                $00030007 =     PSアナログ(LED赤点灯時)
                                $0003000e =     PSジョグコン(LED赤点灯時)
                                $0003000f =     PSパッド未接続
                                $ffffffff =     コントローラタイプ不明(途中で抜かれた時など)

                        バッファアドレスには以下のように格納されます。

                                 0(A1).w        ジョイスティックのキー情報
                                                キー情報の内容については、
                                                「●ジョイスティックの読み込み制御について」
                                                を参照して下さい。

                                 2(A1).b        読み込み結果有効範囲
                                                        bit 0が1の時、 3(A1).bが有効
                                                        bit 1が1の時、 4(A1).bが有効
                                                        bit 2が1の時、 5(A1).bが有効
                                                        bit 3が1の時、 6(A1).bが有効
                                                        bit 4が1の時、 7(A1).bが有効
                                                        bit 5が1の時、 8(A1).bが有効
                                                        bit 6が1の時、 9(A1).bが有効
                                                        bit 7が1の時、10(A1).bが有効
                                 3(A1).b        左スティック上下(上$00 〜 下$FF)
                                 4(A1).b        左スティック左右(左$00 〜 右$FF)
                                 5(A1).b        右スティック上下(上$00 〜 下$FF)
                                 6(A1).b        右スティック左右(左$00 〜 右$FF)
                                 7(A1).b        スロットルまたはアナログボタン1($00 〜 $FF)
                                 8(A1).b        スロットルまたはアナログボタン2($00 〜 $FF)
                                 9(A1).b        スロットルまたはアナログボタン3($00 〜 $FF)
                                10(A1).b        スロットルまたはアナログボタン4($00 〜 $FF)

                        読み込まれるアナログ値は以下のようになります

                        ジョイスティックタイプ
                        $00000000 , $00010000 , $00010001 , $00010100 , $00010101
                        $0001010f , $00020000 , $00020100 , $0002010f , $00030004
                        $0003000f , $ffffffff

                                 2(A1).b        $00
                                 3(A1).b        $80
                                 4(A1).b        $80
                                 5(A1).b        $80
                                 6(A1).b        $80
                                 7(A1).b        $00
                                 8(A1).b        $00
                                 9(A1).b        $00
                                10(A1).b        $00

                        ジョイスティックタイプ
                        $00020001 , $00020101

                                 2(A1).b        $33(マルコン),$02(ハンドル),
                                                $13(ミッションスティック)
                                 3(A1).b        左スティック上下(上$00 〜 下$FF)
                                 4(A1).b        左スティック左右(左$00 〜 右$FF)
                                 5(A1).b        $80
                                 6(A1).b        $80
                                 7(A1).b        スロットルまたはアナログボタン1($00 〜 $FF)
                                 8(A1).b        アナログボタン2($00 〜 $FF)
                                 9(A1).b        アナログボタン3($00 〜 $FF)
                                10(A1).b        アナログボタン4($00 〜 $FF)

                        ジョイスティックタイプ
                        $00030001

                                 2(A1).b        $03
                                 3(A1).b        上下移動量(上$00 〜 下$FF)
                                 4(A1).b        左右移動量(左$00 〜 右$FF)
                                 5(A1).b        $80
                                 6(A1).b        $80
                                 7(A1).b        $00
                                 8(A1).b        $00
                                 9(A1).b        $00
                                10(A1).b        $00

                        ジョイスティックタイプ
                        $00030002

                                 2(A1).b        $72
                                 3(A1).b        $80
                                 4(A1).b        スティック左右(左$00 〜 右$FF)
                                 5(A1).b        $80
                                 6(A1).b        $80
                                 7(A1).b        アナログボタン1($00 〜 $FF)
                                 8(A1).b        アナログボタン2($00 〜 $FF)
                                 9(A1).b        アナログボタン3($00 〜 $FF)
                                10(A1).b        $00

                        ジョイスティックタイプ
                        $00030005 , $00030007

                                 2(A1).b        $0f
                                 3(A1).b        左スティック上下(上$00 〜 下$FF)
                                 4(A1).b        左スティック左右(左$00 〜 右$FF)
                                 5(A1).b        右スティック上下(上$00 〜 下$FF)
                                 6(A1).b        右スティック左右(左$00 〜 右$FF)
                                 7(A1).b        $00
                                 8(A1).b        $00
                                 9(A1).b        $00
                                10(A1).b        $00

                        ジョイスティックタイプ
                        $0003000e

                                 2(A1).b        $72
                                 3(A1).b        $80
                                 4(A1).b        ジョグコン回転量($00 〜 $FF)
                                 5(A1).b        $80
                                 6(A1).b        $80
                                 7(A1).b        回転数(右に一回転すると+1され、左に一回転すると-1される)
                                 8(A1).b        回転方向($01で右回転、$02で左回転、$00で回転無し)
                                 9(A1).b        ?
                                10(A1).b        $00

                ◎MDマルチタップ及びSS,PSパッド接続ケーブル・モード設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0010
                                D3.W =  $0000:使用不可
                                        $0001:使用可能(キャッシュ無し)
                                        $0002:使用可能(キャッシュ有り)
                                        $FFFF:設定値取得

                        戻り値
                                D3.W = 0以上の時
                                        D0.L =  エラーコード

                                D3.W = $FFFFの時
                                        D0.W =  $0000:使用不可
                                                $0001:使用可能(キャッシュ無し)
                                                $0002:使用可能(キャッシュ有り)

                ◎ビット変換モード・設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0011
                                D3.W =  $0000:ビット変換を行わない
                                        $0001:ビット変換を行う
                                        $FFFF:設定値取得
                                D4.W =  ジョイスティック番号(0〜6)

                        戻り値
                                D3.W = 0以上の時
                                        D0.L =  エラーコード

                                D3.W = $FFFFの時
                                        D0.W =  $0000:ビット変換を行わない
                                                $0001:ビット変換を行う
                                                または、エラーコード

                ◎ビット変換データ・設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0012
                                D3.W =  $0000:変換データ設定
                                        $FFFF:変換データ取得
                                D4.W =  ジョイスティック番号(0〜6)
                                A1.L =  変換データ格納アドレス

                        戻り値
                                D0.L =  エラーコード

                ◎出力モード・設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0013
                                D3.W =  $0000:ROM IOCS互換モード
                                        $0001:JOYDRV拡張モード
                                        $FFFF:設定値取得

                        戻り値
                                D3.W = 0以上の時
                                        D0.L =  エラーコード

                                D3.W = $FFFFの時
                                        D0.W =  $0000:ROM IOCS互換モード
                                                $0001:JOYDRV拡張モード

                ◎マルチタップ使用時ジョイスティック数・設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0015
                                D3.W =  マルチタップ使用時ジョイスティック数(0〜6)
                                        $FFFF   ジョイスティック数取得

                        戻り値
                                D3.W = 0以上の時
                                        D0.L =  エラーコード

                                D3.W = $FFFFの時
                                        D0.W =  ジョイスティック数

                        * 接続されているマルチタップのタップ数よりも大きい値を指定した時には
                          マルチタップのタップ数に補正されて読み込みなどの処理が行われます。
                          (プレイステーションパッド接続ケーブルを使用時は例外です)

                ◎アナログスティック十字キーエミュレート変換・設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0016
                                D3.W =  設定パラメータ
                                        bit 0   左十字キーの上下指定(0:無し、1:有り)
                                        bit 1   左十字キーの左右指定(0:無し、1:有り)
                                        bit 2   右十字キーの上下指定(0:無し、1:有り)
                                        bit 3   右十字キーの左右指定(0:無し、1:有り)

                                        他のビットは使用していませんが、0を指定して下さい。

                                        $FFFF:パラメータ取得

                                D4.W =  ジョイスティック番号(0〜6)

                        戻り値
                                D3.W = $FFFF以外の時
                                        D0.L =  エラーコード

                                D3.W = $FFFFの時
                                        D0.W =  設定パラメータ
                                                または、エラーコード

                ◎アナログスティック十字キーエミュレートしきい値・設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0017
                                D3.W =  しきい値($00 〜 $7F)
                                        $FFFF:パラメータ取得
                                D4.W =  ジョイスティック番号(0〜6)

                        戻り値
                                D3.W = $FFFF以外の時
                                        D0.L =  エラーコード

                                D3.W = $FFFFの時
                                        D0.W =  しきい値
                                                または、エラーコード

                ◎START,SELECTボタン動作モード・設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0018
                                D3.W =  動作モード
                                        $0000:通常モード
                                        $0001:FM-TOWNSモード
                                        $FFFF:パラメータ取得
                                D4.W =  ジョイスティック番号(0〜6)

                        戻り値
                                D3.W = $FFFF以外の時
                                        D0.L =  エラーコード

                                D3.W = $FFFFの時
                                        D0.W =  $0000:通常モード
                                                $0001:FM-TOWNSモード
                                                または、エラーコード

                ◎連射モード・設定/取得

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0019
                                D3.W =  ON,OFF回数
                                        $0000xxyy:xx = ON回数、yy = OFF回数
                                        $FFFFFFFF:パラメータ取得
                                D4.W =  ジョイスティック番号(0〜6)
                                D5.W =  ビット番号(0〜F)

                        戻り値
                                D3.W = $FFFF以外の時
                                        D0.L =  エラーコード

                                D3.W = $FFFFの時
                                        D0.W =  $xxyy:xx = ON回数、yy = OFF回数
                                                または、エラーコード

                        * ON回数とOFF回数の両方が0の時は、連射モードが解除となります。

                ◎プレイステーションメモリカード読み込み(PS→PC)

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0020
                                D3.W =  アクセスポート番号(0〜14)
                                        ただし、マルチタップにはポートが4つしかないので、
                                        0〜3までしか意味がない。
                                D4.W =  転送開始フレーム番号(0〜1023)
                                D5.W =  転送フレーム数-1(0〜1023)
                                A1.L =  読み込みデータ格納先アドレス

                        戻り値
                                D0.L =  エラーコード

                ◎プレイステーションメモリカード書き込み(PC→PS)

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0021
                                D3.W =  アクセスポート番号(0〜14)
                                        ただし、マルチタップにはポートが4つしかないので、
                                        0〜3までしか意味がない。
                                D4.W =  転送開始フレーム番号(0〜1023)
                                D5.W =  転送フレーム数-1(0〜1023)
                                A1.L =  書き込みデータ格納先アドレス

                        戻り値
                                D0.L =  エラーコード

                ◎プレイステーション振動パッドコントロール

                        引き数
                                D1.W =  $FFxx
                                D2.W =  $0022
                                D3.W =  ジョイスティック番号(0〜6)
                                D4.W =  bit 0 : 第1モーターのON/OFF指定 0:OFF 1:ON
                                        bit 1 : 第2モーターのON/OFF指定 0:OFF 1:ON
                                        他のビットは将来の拡張の為、0にセットして下さい。
                                D5.B =  第2モーターの振動強弱指定1〜255 (0だとOFFと同じ)
                                        値が大きくなるにつれてモーターの回転が強くなります。
                                        なお、この値はD4.Wのbit 1が1の時だけ有効になります。

                        戻り値
                                D0.L =  エラーコード

                        * なお、このコールで振動ONを指定しただけでは、振動は行いません。
                          指定後、ジョイスティックの状態を定期的に読み込むことで振動します。

        ※IOCSコール$F2

                IOCSコール$F2ではジョイスティック番号の指定が無いため、JOYDRVでは
                ジョイスティック番号0に対して処理が行われます。

                ◎アナログジョイスティックデータ・読み込み

                        引き数
                                D1.L =  $00000000
                                A1.L =  バッファアドレス

                        戻り値
                                D0.L =  $00000000

                        アナログジョイスティックのデータを読み込みます。

                        バッファアドレスには以下のように格納されます。

                                0(A1).w 左スティック上下(上$00 〜 下$FF)
                                2(A1).w 左スティック左右(左$00 〜 右$FF)
                                4(A1).w 右スティック上下又はスロットル(上$00 〜 下$FF)
                                6(A1).w 右スティック左右(左$00 〜 右$FF)
                                8(A1).w ボタンの読み込み情報

                                         キー情報の内容については、
                                        「●ジョイスティックの読み込み制御について」
                                        を参照して下さい。
                                         なお、JOYDRVでは十字キーの状態が読み込まれてしまうので、
                                        付属のAJOY_SS.DAT、AJOY_PS.DATを「/B?ファイル名」の
                                        パラメータで指定し、ボタンの位置を変更して下さい。

                                デジタルスティックが接続されている時には、上下または左右値
                                にはセンタ値($80)がセットされます。(無接続時も同様です)

                        参考にAJOY.Xでの場合を示します。

                                0(A1).w 左スティック上下(上$00 〜 下$FF)
                                2(A1).w 左スティック左右(左$00 〜 右$FF)
                                4(A1).w 右スティック上下又はスロットル(上$00 〜 下$FF)
                                6(A1).w 右スティック左右(左$00 〜 右$FF)
                                8(A1).w ボタンの読み込み情報
                                        bit  0  SELECT
                                        bit  1  START
                                        bit  2  E2
                                        bit  3  E1
                                        bit  4  D
                                        bit  5  C
                                        bit  6  B,B'
                                        bit  7  A,A'
                                        bit  8  B'
                                        bit  9  A'
                                        bit 10  B
                                        bit 11  A

                ◎ジョイスティックモード・設定/取得

                        引き数
                                D1.L =  $00000001
                                D2.W =  AJOY.Xでは、0でデジタルモード、1でアナログモードの
                                        設定になっていますが、JOYDRVでは無視されます。

                        戻り値
                                D0.L =  AJOY.Xではこのコールによって設定された値が返って
                                        きますが、JOYDRVでは実際に接続されている
                                        ジョイスティックの種類が返ってきます。
                                                0:デジタルモード
                                                1:アナログモード

                        ジョイスティックのモードを設定するコールですが、JOYDRVではモードを
                        返すだけになっています。

                ◎通信速度・設定/取得

                        引き数
                                D1.L =  $00000002
                                D2.W =  AJOY.Xでは、0〜3で通信速度を設定しますが、
                                        JOYDRVでは無視されます。

                        戻り値
                                D0.L =  AJOY.Xではこのコールによって設定された値が返って
                                        きますが、JOYDRVでは常に0(最高速度)が返ってきます。

                        通信速度を設定するコールですが、JOYDRVでは意味をなしません。


●C言語・インタフェース

        リンク時にJOYLIB.Lをリンクして下さい。

        エラーコード一覧
        ┌───────┬───────────────────────────┐
        │ 戻り値ret  │内容                                                  │
        ├───────┼───────────────────────────┤
        │0または正の値 │正常終了                                              │
        │-1            │異常終了または設定値が範囲外                          │
        │-2            │ジョイスティック番号が範囲外                          │
        │-3            │JOYDRVが常駐していない                                │
        │-4            │PSパッド接続ケーブルが接続されていない                │
        │-5            │メモリカード未接続                                    │
        │-6            │読み込みエラー                                        │
        │-7            │書き込みエラー                                        │
        │-8            │ビット番号が範囲外                                    │
        └───────┴───────────────────────────┘

        ※ジョイスティック読み込み

                ret=get_joy_data(joyno)

                引き数
                        int joyno       ジョイスティック番号(1〜7)

                戻り値
                        int ret         読み込んだキー情報の内容については、
                                        「●ジョイスティックの読み込み制御について」
                                        を参照して下さい。
                                        または、エラーコード

        ※JOYDRV常駐状態・取得

                ret=get_joydrv()

                引き数
                        無し

                戻り値
                        int ret         エラーコード

        ※アナログスティック読み込み

                ret=get_analog_data(joyno,&buf_adr)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        struct ANALOG {
                                short joy_data
                                char analog_sts
                                char l_stk_ud
                                char l_stk_lr
                                char r_stk_ud
                                char r_stk_lr
                                char a_btn_1
                                char a_btn_2
                                char a_btn_3
                                char a_btn_4
                        } buf_adr       アナログデータ格納エリアのアドレス

                        読み込まれる内容については、「●アセンブラ・インタフェース」の
                        「◎アナログスティック読み込み」を参考にして下さい。

                戻り値
                        int ret         ジョイスティックタイプ
                                        (「●アセンブラ・インタフェース」の
                                         「◎アナログスティック読み込み」を参照)
                                        または、エラーコード

        ※MDマルチタップ及びSS,PSパッド接続ケーブル・モード取得

                ret=get_joy_mtap()

                引き数
                        無し

                戻り値
                        int ret          0:使用不可
                                         1:使用可能(キャッシュ無し)
                                         2:使用可能(キャッシュ有り)
                                        または、エラーコード

        ※MDマルチタップ及びSS,PSパッド接続ケーブル・モード設定

                ret=set_joy_mtap(mode)

                引き数
                        int mode        0:使用不可
                                        1:使用可能(キャッシュ無し)
                                        2:使用可能(キャッシュ有り)

                戻り値
                        int ret         エラーコード

        ※ビット変換モード・取得

                ret=get_joy_bitcnv(joyno)

                引き数
                        int joyno       ジョイスティック番号(1〜7)

                戻り値
                        int ret          0:ビット変換を行わない
                                         1:ビット変換を行う
                                        または、エラーコード

        ※ビット変換モード・設定

                ret=set_joy_bitcnv(joyno,mode)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        int mode        0:ビット変換を行わない
                                        1:ビット変換を行う

                戻り値
                        int ret         エラーコード

        ※ビット変換データ・取得

                ret=get_joy_bitdat(joyno,cnv_data)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        short cnv_data[16]      short型の一次元配列
                                                ビット変換データが格納されます。
                                                内容については、
                                                「●ジョイスティックの読み込み制御について」
                                                の「※ビット変換の処理」を参照して下さい。

                戻り値
                        int ret         エラーコード

        ※ビット変換データ・設定

                ret=set_joy_bitdata(joyno,cnv_data)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        short cnv_data[16]      short型の一次元配列
                                                設定するビット変換データを格納する。
                                                内容については、
                                                「●ジョイスティックの読み込み制御について」
                                                の「※ビット変換の処理」を参照して下さい。

                戻り値
                        int ret         エラーコード

        ※出力モード・取得

                ret=get_joy_out()

                引き数
                        無し

                戻り値
                        int ret          0:ROM IOCS互換モード
                                         1:JOYDRV拡張モード
                                        または、エラーコード

        ※出力モード・設定

                ret=set_joy_out(mode)

                引き数
                        int mode         0:ROM IOCS互換モード
                                         1:JOYDRV拡張モード

                戻り値
                        int ret         エラーコード

        ※マルチタップ使用時ジョイスティック数・取得

                ret=get_tap_maxnum()

                引き数
                        無し

                戻り値
                        int ret         JOY STICK 1のマルチタップのジョイスティック数
                                        または、エラーコード

        ※マルチタップ使用時ジョイスティック数・設定

                ret=set_tap_maxnum(maxnum)

                引き数
                        int maxnum      マルチタップ使用時ジョイスティック数(0〜6)

                戻り値
                        int ret         エラーコード

        ※アナログスティック十字キーエミュレート変換・取得

                ret=get_plus_emu(joyno)

                引き数
                        int joyno       ジョイスティック番号(1〜7)

                戻り値
                        int ret         0〜15:設定パラメータ
                                                bit 0   左十字キーの上下指定(0:無し、1:有り)
                                                bit 1   左十字キーの左右指定(0:無し、1:有り)
                                                bit 2   右十字キーの上下指定(0:無し、1:有り)
                                                bit 3   右十字キーの左右指定(0:無し、1:有り)
                                        または、エラーコード

        ※アナログスティック十字キーエミュレート変換・設定

                ret=set_plus_emu(joyno,sts)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        int sts         0〜15:設定パラメータ
                                                bit 0   左十字キーの上下指定(0:無し、1:有り)
                                                bit 1   左十字キーの左右指定(0:無し、1:有り)
                                                bit 2   右十字キーの上下指定(0:無し、1:有り)
                                                bit 3   右十字キーの左右指定(0:無し、1:有り)

                戻り値
                        int ret         エラーコード

        ※アナログスティック十字キーエミュレートしきい値・取得

                ret=get_plus_thres(joyno)

                引き数
                        int joyno       ジョイスティック番号(1〜7)

                戻り値
                        int ret         $00〜$7F:しきい値
                                        または、エラーコード

        ※アナログスティック十字キーエミュレートしきい値・設定

                ret=set_plus_thres(joyno,pala)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        int pala        $00〜$7F:しきい値

                戻り値
                        int ret         エラーコード

        ※START,SELECTボタンモード・取得

                ret=get_stasel_mode(joyno)

                引き数
                        int joyno       ジョイスティック番号(1〜7)

                戻り値
                        int ret         0:通常モード
                                        1:FM-TOWNSモード
                                        または、エラーコード

        ※START,SELECTボタンモード・設定

                ret=set_stasel_mode(joyno,mode)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        int mode        0:通常モード
                                        1:FM-TOWNSモード

                戻り値
                        int ret         エラーコード

        ※連射モード・取得

                ret=get_lnsha_mode(joyno,bitno,on_cnt,off_cnt)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        int bitno       ビット番号(0〜15)
                        int *on_cnt     ON回数を格納するint型領域のアドレス
                        int *off_cnt    OFF回数を格納するint型領域のアドレス

                戻り値
                        int ret         エラーコード
                        int *on_cnt     ON回数(0〜255)
                        int *off_cnt    OFF回数(0〜255)

                連射モードが解除されている場合、ON回数とOFF回数の両方に0が
                設定されます。

        ※連射モード・設定

                ret=set_lnsha_mode(joyno,bitno,on_cnt,off_cnt)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        int bitno       ビット番号(0〜15)
                        int on_cnt      ON回数(0〜255)
                        int off_cnt     OFF回数(0〜255)

                戻り値
                        int ret         エラーコード

                連射モードを解除する場合、ON回数とOFF回数の両方に0を
                設定します。

        ※プレイステーションメモリカード読み込み(PS→PC)

                ret=read_ps_memc(port_num,start_flm,flm_count,data_adr)

                引き数
                        int port_num    ポート番号(1〜15,実質は1〜4しか意味がない)
                        int start_flm   転送開始フレーム番号(0〜1023)
                        int flm_count   転送フレーム数-1(0〜1023)
                        char *data_adr  読み込みデータ格納先アドレス

                戻り値
                        int ret         エラーコード

        ※プレイステーションメモリカード書き込み(PC→PS)

                ret=write_ps_memc(port_num,start_flm,flm_count,data_adr)

                引き数
                        int port_num    ポート番号(1〜15,実質は1〜4しか意味がない)
                        int start_flm   転送開始フレーム番号(0〜1023)
                        int flm_count   転送フレーム数-1(0〜1023)
                        char *data_adr  書き込みデータ格納先アドレス

                戻り値
                        int ret         エラーコード

        ※プレイステーション振動パッドコントロール

                int ret=ctrl_ps_motor(joyno,ctrl_sts,power)

                引き数
                        int joyno       ジョイスティック番号(1〜7)
                        int ctrl_sts    コントロールステータス
                                        bit 0   0:第1モーターOFF       1:第1モーターON
                                        bit 1   0:第2モーターOFF       1:第2モーターON
                        int power       第2モーターの回転強弱指定(1〜255)
                                        ctrl_stsのbit 1が1の時のみ有効

                戻り値
                        int ret         エラーコード

                なお、このコールで振動ONを指定しただけでは、振動は行いません。
                指定後、ジョイスティックの状態を定期的に読み込むことで振動します。


●BASIC・インタフェース

         X-BASICに標準で付属しているSTICK.FNCの"stick"と"strig"関数では、
        ジョイスティック1と2の十字キーとA,Bボタンの状態しか取得できません。
         従って、JOYDRV.XをX-BASICで使用する時は、BASIC.CNFの"FUNC="にSTICK2.FNCを
        追加して下さい。
         なお、このSTICK2.FNC内の関数は、「●C言語・インタフェース」と同じです。


●SS,PSパッド接続ケーブルについて

         ケーブルの作成方法については、セガサターンは"SS_CABLE.DOC"を、
        プレイステーションは"PS_CABLE.DOC"を参照して下さい。


●注意事項

        1.正常に読み込みができなくなった時は、何度かコネクタを差し直して下さい。

        2.MDマルチタップの時は、タップ:0〜3、PORT2:4の最大5個まで、
          SSマルチタップの時は、タップ:0〜5、PORT2:6の最大7個まで、
          PSマルチタップの時は、タップ:0〜3、PORT2:4の最大5個まで、
          認識が可能です。

        3.SS,PSパッド接続ケーブル及びMD変換コネクタでマルチタップを使用する時は、
          JOY STICK 1のポートでしか使用できません。
          JOY STICK 2の方はハード的な問題の為、使用できません。

        4.version 2.10以前のJOYDRVとそれ以降のJOYDRVを同時に使用して常駐&解除を
          行いますと、バスエラーなどが発生しやすくなりますので、できるだけ避けて下さい。
          (version 2.10以前のJOYDRVでは常駐解除時のチェックが甘い為です。(__;)


●作成環境

        本体  :X68030(無改造、68882有り)
        クロック:25MHzキャッシュ有り

        にて、作成及びテストを行いました。


●使用(配布、転載)について

         このようなたいした事のないプログラムですが、使っていただけたら嬉しいかぎりです。
        「同人または市販ソフトでの使用」「ネットでの配布、転載」なども特に制限はありませんので
        自由に行って下さい。(連絡を頂けたらうれしいです)
         ただし、一般常識において良くないと思われる事はしないで下さい。

        ☆注意!

        JOYCNF.XとJOYCNF.DOCについては、TAKKUNさんに著作権があります。


●バージョン履歴

        version 1.60以前                未公開

        version 1.60    1997.7.24       正式配布
                                        8/15の夏コミにて配布

        version 1.61    1997.8.28       正式配布
                                        ・セガマルチコントローラ対応
                                        ・ドキュメント追加

        version 1.62    1997.9.06       ・セガサターンマルチタップのアクセスタイミング変更
                                        ・高速化
                                        ・魔法のパッドが読み込めなくなっていたエンバグを修正
                                        ・プレイステーション接続ケーブルの為の準備
                                         (パラメータ指定の/Mの内容を変更)

        version 1.70    1997.9.27       正式配布
                                        ・プレイステーションパッド接続ケーブル対応
                                        ・SS,PSパッド接続ケーブルの配線図または回路図を添付

        version 1.71    1997.10.31      正式配布
                                        ・プレイステーション振動パッド対応
                                        ・プレイステーションパッド読み込み時のウエイト値変更
                                        ・PSパッド接続ケーブル回路一部変更

        version 1.72    1997.12.05      正式配布
                                        ・プレイステーションメモリカードのリード時のウエイト値変更
                                        ・プレイステーションのアナログスティック内にあるボタンに対応
                                         (今まで、あることすら知らなかった…^^;)
                                        ・プレイステーションのキー状態のビット配列変更
                                         これで、PSホリスティックとPSナムコスティックが
                                         バーチャスティックなどと同じ割り当てになります。
                                        ・PSパッド接続ケーブル回路一部変更
                                         (アクセスランプのLEDを削除。LM317のメーカーが違うと
                                          部品の個体差で正常に動作しなくなってしまう為。)

        version 1.72A   1997.12.10      正式配布
                                        ・サターンパッド読み込み時のウエイト値変更
                                         これにより、コードレスパッド対応(1Pのみ)となります。
                                         2Pが使用不可なのは、注意事項の7の理由によるものです
                                         ただし、コードレスパッドをマルチタップに接続すると
                                         2Pも使用できるようになります。

        version 2.00    1998.3.22       正式配布
                                        ・アナログコントローラの読み込みが可能になりました。
                                         対応コントローラ
                                                SSマルチコントローラ
                                                SSミッションスティック
                                                SSハンドルコントローラ
                                                PSアナログパッド
                                        ・アナログスティックで十字キーの代わりができます。
                                         ハンドルコントローラで格ゲーができてしまいます。
                                         (ザブングル!(^^;)
                                        ・AJOY.Xのインタフェース(IOCS$F2)に対応しているので、
                                         AJOY.Xの代用ができます。
                                         (アフターバーナーに入っているAJOY版スペハリにて
                                         確認しました)
                                        ・マルチタップを途中で抜き差ししてもフリーズしなく
                                         なりました。
                                        ・PSパッド接続ケーブル使用時でマルチタップが無い時、
                                         2P側が使用できなくなる問題を解消しました。
                                        ・サターンパッド接続ケーブル回路一部変更
                                         version 1.72Aのコードレスパッド対応が不完全だった
                                         のですが(compact XVIのみ)、この対応により完全対応
                                         となります。
                                         (ねことらさん、ありがとうございました。m(__)m)

        version 2.01    1998.7.01       正式配布
                                        ・一部のゲーム(スーパーストリートファイター2とグラ2)でプレイステーション
                                         パッドをアナログモードにしていると、下方向が誤入力
                                         されてしまう不具合を修正
                                        ・プレイステーションパッドの読み込みを高速化した

        version 2.01A   1998.7.02       正式配布
                                        ・version 2.01での修正が不完全だったので更に修正

        version 2.02    1998.8.04       正式配布
                                        ・セガサターンパッドの読み込みを高速化した
                                         (気持ち程度ですが…(^^;)
                                        ・パラメータ指定で/Dを追加した。(Thanks ねことらさん)

        version 2.03    1998.9.25       正式配布
                                        ・PSデュアルショックの第2モーターに対応!
                                         これに伴い関数の仕様が変更されています
                                        ・TAKKUNさん作のビット変換データファイルの作成
                                         ツールを同梱
                                         (TAKKUNさん、ありがとうございますm(__)m)
                                        ・SFXVI関連のパッチ及びC言語ライブラリを同梱

        version 2.04    1998.11.06      正式配布
                                        ・デュアルショックのコントローラの時、約2.5秒間
                                         以内に次のアクセスを行わないとコネクタ挿入時に送信
                                         したモーターパラメータをコントローラ側が忘れてしま
                                         うことが判明。(モーターが回転しなくなってしまう)
                                         これを回避するためにPSのコントローラに2秒以上
                                         読み込みが行われなかった時、モーターパラメータを
                                         送信するようにした。
                                         (安定動作のためのご協力ありがとうございました。
                                         ぴぴぴ☆さん。m(__)m)
                                        ・サターンパッド接続ケーブル回路図に補足を追加
                                         作り方によってはパスコンの値を換えた方がいいらしい
                                         ので、そのことを補足で追加。
                                         (情報ありがとうございます。ねことらさんm(__)m)

        version 2.10    1998.12.27      正式配布
                                        ・内部の作りを大幅に変更
                                         (ソース&流れがきれいになりました)
                                        ・プレイステーション用ネジコン、プロポコン、
                                         ジョグコンに対応(ジョグコンのモーター制御は未対応)
                                        ・常駐時に接続されているコントローラの種類を
                                         詳細に表示するようにした。
                                        ・マルチタップキャッシュクリアのコールを削除した。
                                         (D2.W=$0014)
                                        ・アナログスティック読み込みのコールの返り値で
                                         接続されているコントローラのタイプを詳細に
                                         返すようにした。(D2.W=$0008)
                                        ・常駐を解除する時に違うバージョンのJOYDRVが常駐されて
                                         いると解除できないようにした。
                                         (そのあと白帯が表示されてしまうので・・(^^;)
                                         Thanks ねことらさん

        version 2.10A   1999.4.11       正式配布
                                        ・60TURBOでキャッシュONを指定するとプレイステーション
                                         パッドの読み込みが不安定になる不具合を修正。
                                         (情報ありがとうございました。EXCEED.さんm(__)m)
                                        ・対応パッドの一覧にプレイステーション用DDRマッドを
                                         追加しました。
                                        ・注意事項に項目を一つ追加しました。
                                        ・私のホームページ(2者合同でやっています)のアドレス
                                         とe-mailのアドレスを追加しました。

        version 2.20    1999.8.09       正式配布
                                        ・FM-TOWNSパッドのSELECT、STARTボタンに対応
                                        ・連射モードの追加
                                        ・細かいバグの修正
                                        ・ドリームキャストパッドへの接続を考慮して
                                         内部の作りを大幅に変更した。


●今後の予定

        対応予定の順に記述しています。ただし、対応時期は未定です。
        (ものによってはやらないかも・・・)

                ドリームキャストパッドの接続(ビジュアルメモリ含む)
                ジョグコンのモーター制御


●感謝

        サターンパッド接続ケーブルの改良やその他のことでいろいろとお世話になりました
        ねことらさんに感謝致します。m(__)m

        ビット変換データファイルを簡単に作成できるツールを作って頂いたり、パッチ作りで
        お世話になりましたTAKKUNさんに感謝致します。m(__)m
        (同梱を許可して下さり、ありがとうございます)

        SFXVIのパッチやデュアルショックの第2モーターの安定動作で色々と情報を下さいました
        ぴぴぴ☆さんに感謝致します。m(__)m

        60TURBOでの動作情報を頂きましたEXCEED.さんに感謝致します。m(__)m

        FM-TOWNSパッドでの動作確認をして頂けた人生りりかちゃん☆彡さんに感謝致します。m(__)m

        連射モードへの要望を下さいました立花えりりんさんに感謝致します。m(__)m


●参考資料及び使用したプログラム

        電脳倶楽部67号のメガドライブ用ジョイスティックの解析資料
        Inside X68000
        X68000環境ハンドブック
        68000プログラマーズ・ハンドブック
        ゲームラボ96年4月号 サターンパッドの解析記事
        ゲームラボ95年8月号 PSコントローラの連射化記事
        ラジオの製作1988年1月号 一石二聴の製作記事
        X68000版 スーパーストリートファイターIIのプログラム
        HAS.X
        HLK.X
        PSM.HAS(アクセス方法を参考にさせていただきました)

        上記のプログラム及び記事を作成された方々に、感謝いたします。m(__)m


●後記

        ドキュメント作成日      1999.8.9

        連絡先  満開ネット      MKSX0801        HUYE
                HP              http://www02.so-net.ne.jp/‾goraku/
                e-mail          huye@ma.kcom.ne.jp

        作成者  HUYE

EOF